home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / ada / gnat1792.zip / gnat179b / t-adainc / i-c.ads < prev    next >
Text File  |  1994-05-19  |  15KB  |  298 lines

  1. ------------------------------------------------------------------------------
  2. --                                                                          --
  3. --                         GNAT COMPILER COMPONENTS                         --
  4. --                                                                          --
  5. --                         I N T E R F A C E S . C                          --
  6. --                                                                          --
  7. --                                 S p e c                                  --
  8. --                                                                          --
  9. --                            $Revision: 1.3 $                              --
  10. --                                                                          --
  11. --           Copyright (c) 1992,1993,1994 NYU, All Rights Reserved          --
  12. --                                                                          --
  13. -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  14. -- terms of the  GNU General Public License as published  by the Free Soft- --
  15. -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
  16. -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
  17. -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
  18. -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
  19. -- for  more details.  You should have  received  a copy of the GNU General --
  20. -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
  21. -- to the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. --
  22. --                                                                          --
  23. ------------------------------------------------------------------------------
  24.  
  25. package Interfaces.C is
  26.  
  27.    pragma Pure;
  28.  
  29.    --  Declaration's based on C's <limits.h>
  30.  
  31.    CHAR_BIT  : constant := 8;
  32.    SCHAR_MIN : constant := -128;
  33.    SCHAR_MAX : constant := 127;
  34.    UCHAR_MAX : constant := 255;
  35.  
  36.    --  Signed and Unsigned Integers. Note that in GNAT, we have ensured that
  37.    --  the standard predefined Ada types correspond to the standard C types
  38.  
  39.    type Int   is new Integer;
  40.    type Short is new Short_Integer;
  41.    type Long  is new Long_Integer;
  42.  
  43.    type Signed_Char is range SCHAR_MIN .. SCHAR_MAX;
  44.    for Signed_Char'Size use CHAR_BIT;
  45.  
  46.    type Unsigned       is mod 2 ** Integer'Size;
  47.    type Unsigned_Short is mod 2 ** Short_Integer'Size;
  48.    type Unsigned_Long  is mod 2 ** Long_Integer'Size;
  49.  
  50.    type Unsigned_Char is mod (UCHAR_MAX + 1);
  51.    for Unsigned_Char'Size use CHAR_BIT;
  52.  
  53.    subtype Plain_Char is Unsigned_Char; -- ??? should be parametrized
  54.  
  55.    type Ptrdiff_T is new Integer;       -- ??? should be parametrized
  56.  
  57.    type Size_T is mod 2 ** 32;          -- ??? should be parametrized
  58.  
  59.    --  Floating-Point
  60.  
  61.    type Float       is new Standard.Float;
  62.    subtype C_Float  is Float;
  63.  
  64.    type Double      is new Standard.Long_Float;
  65.  
  66.    type Long_Double is new Standard.Long_Long_Float;
  67.  
  68.    --  Characters and Strings
  69.  
  70.    --  type Char is new Character;
  71.    subtype Char is Character;
  72.    --  We don't yet allow derivation from type Character ???
  73.  
  74.    Nul : constant Char := Char'First;
  75.  
  76.    Ada_To_C : constant array (Character) of Char := (
  77.      Char'Val (000), Char'Val (001), Char'Val (002), Char'Val (003),
  78.      Char'Val (004), Char'Val (005), Char'Val (006), Char'Val (007),
  79.      Char'Val (008), Char'Val (009), Char'Val (010), Char'Val (011),
  80.      Char'Val (012), Char'Val (013), Char'Val (014), Char'Val (015),
  81.      Char'Val (016), Char'Val (017), Char'Val (018), Char'Val (019),
  82.      Char'Val (020), Char'Val (021), Char'Val (022), Char'Val (023),
  83.      Char'Val (024), Char'Val (025), Char'Val (026), Char'Val (027),
  84.      Char'Val (028), Char'Val (029), Char'Val (030), Char'Val (031),
  85.      Char'Val (032), Char'Val (033), Char'Val (034), Char'Val (035),
  86.      Char'Val (036), Char'Val (037), Char'Val (038), Char'Val (039),
  87.      Char'Val (040), Char'Val (041), Char'Val (042), Char'Val (043),
  88.      Char'Val (044), Char'Val (045), Char'Val (046), Char'Val (047),
  89.      Char'Val (048), Char'Val (049), Char'Val (050), Char'Val (051),
  90.      Char'Val (052), Char'Val (053), Char'Val (054), Char'Val (055),
  91.      Char'Val (056), Char'Val (057), Char'Val (058), Char'Val (059),
  92.      Char'Val (060), Char'Val (061), Char'Val (062), Char'Val (063),
  93.      Char'Val (064), Char'Val (065), Char'Val (066), Char'Val (067),
  94.      Char'Val (068), Char'Val (069), Char'Val (070), Char'Val (071),
  95.      Char'Val (072), Char'Val (073), Char'Val (074), Char'Val (075),
  96.      Char'Val (076), Char'Val (077), Char'Val (078), Char'Val (079),
  97.      Char'Val (080), Char'Val (081), Char'Val (082), Char'Val (083),
  98.      Char'Val (084), Char'Val (085), Char'Val (086), Char'Val (087),
  99.      Char'Val (088), Char'Val (089), Char'Val (090), Char'Val (091),
  100.      Char'Val (092), Char'Val (093), Char'Val (094), Char'Val (095),
  101.      Char'Val (096), Char'Val (097), Char'Val (098), Char'Val (099),
  102.      Char'Val (100), Char'Val (101), Char'Val (102), Char'Val (103),
  103.      Char'Val (104), Char'Val (105), Char'Val (106), Char'Val (107),
  104.      Char'Val (108), Char'Val (109), Char'Val (110), Char'Val (111),
  105.      Char'Val (112), Char'Val (113), Char'Val (114), Char'Val (115),
  106.      Char'Val (116), Char'Val (117), Char'Val (118), Char'Val (119),
  107.      Char'Val (120), Char'Val (121), Char'Val (122), Char'Val (123),
  108.      Char'Val (124), Char'Val (125), Char'Val (126), Char'Val (127),
  109.      Char'Val (128), Char'Val (129), Char'Val (130), Char'Val (131),
  110.      Char'Val (132), Char'Val (133), Char'Val (134), Char'Val (135),
  111.      Char'Val (136), Char'Val (137), Char'Val (138), Char'Val (139),
  112.      Char'Val (140), Char'Val (141), Char'Val (142), Char'Val (143),
  113.      Char'Val (144), Char'Val (145), Char'Val (146), Char'Val (147),
  114.      Char'Val (148), Char'Val (149), Char'Val (150), Char'Val (151),
  115.      Char'Val (152), Char'Val (153), Char'Val (154), Char'Val (155),
  116.      Char'Val (156), Char'Val (157), Char'Val (158), Char'Val (159),
  117.      Char'Val (160), Char'Val (161), Char'Val (162), Char'Val (163),
  118.      Char'Val (164), Char'Val (165), Char'Val (166), Char'Val (167),
  119.      Char'Val (168), Char'Val (169), Char'Val (170), Char'Val (171),
  120.      Char'Val (172), Char'Val (173), Char'Val (174), Char'Val (175),
  121.      Char'Val (176), Char'Val (177), Char'Val (178), Char'Val (179),
  122.      Char'Val (180), Char'Val (181), Char'Val (182), Char'Val (183),
  123.      Char'Val (184), Char'Val (185), Char'Val (186), Char'Val (187),
  124.      Char'Val (188), Char'Val (189), Char'Val (190), Char'Val (191),
  125.      Char'Val (192), Char'Val (193), Char'Val (194), Char'Val (195),
  126.      Char'Val (196), Char'Val (197), Char'Val (198), Char'Val (199),
  127.      Char'Val (200), Char'Val (201), Char'Val (202), Char'Val (203),
  128.      Char'Val (204), Char'Val (205), Char'Val (206), Char'Val (207),
  129.      Char'Val (208), Char'Val (209), Char'Val (210), Char'Val (211),
  130.      Char'Val (212), Char'Val (213), Char'Val (214), Char'Val (215),
  131.      Char'Val (216), Char'Val (217), Char'Val (218), Char'Val (219),
  132.      Char'Val (220), Char'Val (221), Char'Val (222), Char'Val (223),
  133.      Char'Val (224), Char'Val (225), Char'Val (226), Char'Val (227),
  134.      Char'Val (228), Char'Val (229), Char'Val (230), Char'Val (231),
  135.      Char'Val (232), Char'Val (233), Char'Val (234), Char'Val (235),
  136.      Char'Val (236), Char'Val (237), Char'Val (238), Char'Val (239),
  137.      Char'Val (240), Char'Val (241), Char'Val (242), Char'Val (243),
  138.      Char'Val (244), Char'Val (245), Char'Val (246), Char'Val (247),
  139.      Char'Val (248), Char'Val (249), Char'Val (250), Char'Val (251),
  140.      Char'Val (252), Char'Val (253), Char'Val (254), Char'Val (255));
  141.  
  142.    C_To_Ada : array (Char) of Character := (
  143.      Character'Val (000), Character'Val (001), Character'Val (002),
  144.      Character'Val (003), Character'Val (004), Character'Val (005),
  145.      Character'Val (006), Character'Val (007), Character'Val (008),
  146.      Character'Val (009), Character'Val (010), Character'Val (011),
  147.      Character'Val (012), Character'Val (013), Character'Val (014),
  148.      Character'Val (015), Character'Val (016), Character'Val (017),
  149.      Character'Val (018), Cha